console.log(`
【fs 模块概述】
    Node.js 的文件系统模块 (fs) 允许我们与文件系统进行交互，
    提供了大量用于文件和目录操作的方法。这些方法通常有同步和异步两种版本。
  `);

console.log(`
【文件复制Api】
    1. fs.copyFile()             异步复制
    2. fs.copyFileSync()         同步复制
    3. fs.createReadStream()     流式复制
`);

console.log(
  `使用文件写入Api前，需要先导入fs模块：
   导入模块、require 是 Node.js 环境中的'全局'变量，用来导入模块
   const fs = require("fs");
  `
);
const { log } = require("console");
const fs = require("fs");

console.log(`
【同步复制】fs.copyFileSync()
    语法：fs.copyFileSync(源文件路径, 目标文件路径)
    功能：将源文件复制到目标文件
    参数：
        源文件路径：要复制的文件的路径
        目标文件路径：复制到的文件的路径
    返回值：无
    注意事项：
        源文件必须存在，否则会报错
        目标文件如果不存在，会自动创建
        目标文件如果存在，会被覆盖
    `);
// 复制文件
fs.copyFileSync("./10_fs文件系统学习笔记(完整版).md", "./同步复制.txt");
console.log("fs.copyFileSync()：复制成功");

console.log(`
 【异步复制】fs.copyFile()
    语法：fs.copyFile(源文件路径, 目标文件路径, 回调函数)
    功能：将源文件复制到目标文件
    参数：
        源文件路径：要复制的文件的路径
        目标文件路径：复制到的文件的路径
    返回值：无
    注意事项：
        源文件必须存在，否则会报错
        目标文件如果不存在，会自动创建
        目标文件如果存在，会被覆盖
 `);
// 异步复制
fs.copyFile("./10_fs文件系统学习笔记(完整版).md", "./异步复制.txt", (err) => {
  if (err) {
    console.log(err);
  } else {
    console.log("fs.copyFile()：复制成功");
  }
});

console.log(`
 【流式复制】fs.createReadStream()
    语法：fs.createReadStream(源文件路径, 目标文件路径, 回调函数)
    功能：将源文件复制到目标文件
    参数：
        源文件路径：要复制的文件的路径
        目标文件路径：复制到的文件的路径
    返回值：无
    注意事项：
        源文件必须存在，否则会报错
        目标文件如果不存在，会自动创建
        目标文件如果存在，会被覆盖
 `);
// 流式复制
const read = fs.createReadStream("./10_fs文件系统学习笔记(完整版).md"); // 读取流
const writ = fs.createWriteStream("./流式复制.txt"); // 写入流
read.pipe(writ); // 管道流
read.on("end", () => console.log("读取成功"));
writ.on("end", () => console.log("写入成功"));
read.on("error", (err) => console.log(err));
writ.on("error", (err) => console.log(err));




console.log(`
【同步读写】
    同步读写：
        指的是在读写文件时，必须等待文件读写完成后，才能继续执行后续的代码
    同步实现（ writeFileSync / readFileSync ）
`);
const data = fs.readFileSync("./10_fs文件系统学习笔记(完整版).md");
fs.writeFileSync("./同步读写.txt", data);
console.log("同步读写：复制成功");




console.log(`
【异步读写】
    异步读写：
        指的是在读写文件时，不需要等待文件读写完成，即可继续执行后续的代码
    异步实现（ watchFile / readFile ）
`);
// 异步读写
fs.readFile("./10_fs文件系统学习笔记(完整版).md", (err, data) => {
  if (err) {
    console.log(err);
  } else {
    fs.writeFile("./异步读写.txt", data, (err) => {
      if (err) {
        console.log(err);
      } else {
        console.log("异步读写：复制成功");
      }
    });
  }
});